package com.qf.test;

import com.qf.fangdong.FangDong;
import com.qf.fangdongimpl.FangDongImpl;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 *
 * Jdk动态代理对象：
 *     必须有接口，和真实对象实现同一个接口
 *
 */
@SuppressWarnings("all")

public class JdkProxy {

    public static void main(String[] args) {
//        创建真实对象
        FangDong fangDong = new FangDongImpl();
//        System.out.println(FangDong.class);   interface com.qf.fangdong.FangDong
//        System.out.println(fangDong.getClass());    class com.qf.fangdongimpl.FangDongImpl

//        创建代理对象
        /**
         * ClassLoader loader,
         * Class<?>[] interfaces,
         * nvocationHandler h)
         */
        FangDong proxyF = (FangDong)Proxy.newProxyInstance(JdkProxy.class.getClassLoader(),
                fangDong.getClass().getInterfaces(),
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("代理：带客户看房子");
                        System.out.println("代理：给客户介绍房子");

                        Object invoke = method.invoke(fangDong, args);
                        System.out.println("代理：收租");
                        return invoke;
                    }
                }
        );
//        代理对象调用方法
        proxyF.ZuFang();
    }
}
